startDragging() starts with:
const sprite = backend.get_sprite(global.stage, event);
this._sprite = sprite;
but then vfunc_touch_event() would only compare this._sprite to:
sprite = backend.get_pointer_sprite(global.stage);
which never matched. And so _endDragging() was never called and
the grab was never dismissed, effectively freezing the shell.
Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/8660
Fixes: c206ec693 ("slider: Use Clutter.Sprite for pointing focus accounting")
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3887>
vfunc_touch_event(event) {
const backend = global.stage.get_context().get_backend();
- const sprite = backend.get_pointer_sprite(global.stage);
+ const sprite = backend.get_sprite(global.stage, event);
if (!this._dragging &&
event.type() === Clutter.EventType.TOUCH_BEGIN) {